package org.gzr.myreflect.getmethods;

import java.lang.reflect.Method;

/**
 * 获取成员方法
 * Method[] getMethods()返回所有成员方法对象的数组（只能拿public的）
 * Method[] getDeclaredMethods()返回所有成员方法对象的数组，存在就能拿到
 * Method getMethod(String name, Class<?>... parameterTypes)返回单个成员方法对象（只能拿public的）
 * Method getDeclaredMethod(String name, Class<?>... parameterTypes)返回单个成员方法对象，存在就能拿到
 */
public class MyMethods {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        //1.获取class对象
        Class<?> aClass = Class.forName("org.gzr.myreflect.getmethods.entity.Student");

        //2.获取方法
        //getMethods可以获取父类中public修饰的方法
        Method[] methods1 = aClass.getMethods();
        for (Method method : methods1) {
            System.out.println(method);
        }

        System.out.println("=====");

        //获取所有的方法（包含私有）
        //但是只能获取自己类中的方法
        Method[] methods2 = aClass.getDeclaredMethods();
        for (Method method : methods2) {
            System.out.println(method);
        }

        System.out.println("=====");

        //获取指定的方法（空参）
        Method method3 = aClass.getMethod("study");
        System.out.println(method3);

        //获取指定的私有方法
        Method method5 = aClass.getDeclaredMethod("sleep");
        System.out.println(method5);
    }
}
